[#523] Archive legacy hackathon sites in Forge - #524
Conversation
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
|
Important Approval pendingCodeRabbit has no unresolved comments, but it could not review the latest commit because the review limit was reached. Follow the review guidance in this comment to continue. 📝 WalkthroughWalkthroughAdds static Knight Hacks archive applications for 2020, 2021, 2023, and 2024. Each archive preserves public historical content, removes legacy workflows and backend traffic, and defines 404/410 route handling. The change adds responsive pages, local sponsor data, Playwright coverage, static Next.js builds, Docker images, nginx serving, E2E container scripts, and repository development wiring. Merge Risk: 🟡 Moderate · up to The PR replaces four legacy applications with static archives and retires their workflows. It is not merge-ready until the multi-application scope is split or explicitly approved, and the 2020 image’s generated public files should be verified before hostname cutover; the remaining archive-content, layout, documentation, and test-harness issues are bounded. 🚥 Pre-merge checks | ✅ 6 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (6 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 37 functions across 37 files. (33 skipped: 33 unsupported.) Full details: No Hardcoded SecretsExplanation No hardcoded secrets were found in the 207 changed files. Scans found no known API-key or token formats, private-key blocks, bearer tokens, or security-named string assignments. Environment references are limited to test-container variables such as Full details: Validated Env AccessExplanation
Full details: No Typescript Escape HatchesExplanation No TypeScript escape hatches were added. The PR's changed TypeScript and TSX files contain no
✨ Finishing Touches 💡 2📝 Generate docstrings 💡
🛠️ Fix failing CI checks 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Co-authored-by: Codex <codex@openai.com>
There was a problem hiding this comment.
Actionable comments posted: 1
Note
Quiet mode is enabled, so only the most important comments were posted inline. Other review comments are grouped below.
🟡 Other comments (8)
apps/2024/src/app/page.tsx-67-68 (1)
67-68: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winCorrect the FAQ duration.
Friday at 5 PM through Sunday at 6 PM spans 49 hours. Update either
36-houror the stated times to match the archived 2024 schedule.apps/2021/src/data/schedule.json-151-159 (1)
151-159: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winRender Saturday events in chronological order.
Move
Tech Industry AMAbeforeIntroduction to Geospatial Data Science.apps/2023/src/styles/archive.css-420-422 (1)
420-422: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winKeep
.past-eventclear of the MLH badge.At 320px, the 85px badge overlays the right side of
.past-eventbecause the badge has a higher stacking order. Reserve badge space in the mobile navigation.Proposed fix
`@media` (max-width: 600px) { .archive-nav { top: 12px; left: 2.5%; width: 95%; padding-left: 7px; + padding-right: 96px; border-radius: 10px; }Also applies to: 478-492
.forge/features/legacy-hackathon-archives/status.md-212-215 (1)
212-215: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winReconcile the push gate with the recorded branch state.
The checklist still requires human approval before push, but this file records the branch and PR as already pushed. Update the checklist to document the approved exception, or remove the push and PR records until approval is complete.
As per coding guidelines, keep
status.mdcurrent and challenge missing requirements.Also applies to: 275-277
Source: Coding guidelines
apps/2020/e2e/archive.spec.ts-22-23 (1)
22-23: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winCheck forbidden links as well as buttons.
The current assertions can miss a
Register,Apply, orDashboardlink. Assert forbidden names across bothlinkandbuttonroles.Also applies to: 53-53
scripts/stop-archive-e2e-container.ts-7-11 (1)
7-11: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick winPropagate unexpected Docker stop failures.
The broad catch hides permission errors, daemon failures, and other stop failures. Teardown can report success while the container remains running. Ignore only the expected missing-container case and rethrow other errors.
scripts/stop-archive-e2e-container.ts-4-4 (1)
4-4: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUse the validated environment boundary.
process.env.ARCHIVE_E2E_CONTAINERbypasses the repository's validated environment access. Add this variable to the validated schema and read it through the sharedenvboundary.As per coding guidelines, the codebase uses validated env imports instead of raw
process.envaccess.Source: Coding guidelines
apps/2020/src/components/archive-2020.tsx-480-485 (1)
480-485: 🚀 Performance & Scalability | 🟡 Minor | ⚡ Quick winRender only the active responsive layout.
Archive2020mounts both layouts, and CSS only hides one. Both mounted trees initializeAnimatedBoat, which can start a looping Lottie animation. Gate the subtrees with the stylesheet’s(min-width: 900px) and (min-height: 500px)condition so each viewport mounts one instance.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yml
Review profile: QUIET
Plan: Pro Plus
Run ID: 457a8225-e556-4590-8a66-a4231af9c54e
⛔ Files ignored due to path filters (133)
apps/2020/public/assets/About-Page-Moon-Right.jpgis excluded by!**/*.jpgapps/2020/public/assets/About-Page.pngis excluded by!**/*.pngapps/2020/public/assets/Castle.pngis excluded by!**/*.pngapps/2020/public/assets/Discord-Black.pngis excluded by!**/*.pngapps/2020/public/assets/Discord-White.pngis excluded by!**/*.pngapps/2020/public/assets/FAQ-Glacier.pngis excluded by!**/*.pngapps/2020/public/assets/FAQ-Page.pngis excluded by!**/*.pngapps/2020/public/assets/Facebook-Black.pngis excluded by!**/*.pngapps/2020/public/assets/Facebook-White.svgis excluded by!**/*.svgapps/2020/public/assets/Home-Clouds.pngis excluded by!**/*.pngapps/2020/public/assets/Home-Page.pngis excluded by!**/*.pngapps/2020/public/assets/Home-Sun.pngis excluded by!**/*.pngapps/2020/public/assets/Home-Water.pngis excluded by!**/*.pngapps/2020/public/assets/Instagram-Black.pngis excluded by!**/*.pngapps/2020/public/assets/Instagram-White.svgis excluded by!**/*.svgapps/2020/public/assets/Logo.svgis excluded by!**/*.svgapps/2020/public/assets/Register-Page.pngis excluded by!**/*.pngapps/2020/public/assets/Schedule-Glacier.pngis excluded by!**/*.pngapps/2020/public/assets/Schedule-Page.pngis excluded by!**/*.pngapps/2020/public/assets/Sponsor-Page.pngis excluded by!**/*.pngapps/2020/public/assets/Twitter-Black.pngis excluded by!**/*.pngapps/2020/public/assets/Twitter-White.svgis excluded by!**/*.svgapps/2020/public/assets/boats/Capital-One-Boat.pngis excluded by!**/*.pngapps/2020/public/assets/boats/Disney-Boat.pngis excluded by!**/*.pngapps/2020/public/assets/boats/EA-Boat.pngis excluded by!**/*.pngapps/2020/public/assets/boats/FB-Boat.pngis excluded by!**/*.pngapps/2020/public/assets/boats/Google-Cloud-Boat.pngis excluded by!**/*.pngapps/2020/public/assets/boats/Microsoft-Boat.pngis excluded by!**/*.pngapps/2020/public/assets/boats/NSIN-Boat.pngis excluded by!**/*.pngapps/2020/public/assets/boats/Oracle-Boat.pngis excluded by!**/*.pngapps/2020/public/assets/boats/PWC-Boat.pngis excluded by!**/*.pngapps/2020/public/assets/boats/RBC-Boat.pngis excluded by!**/*.pngapps/2020/public/assets/mlh-trust-badge-2020-white.svgis excluded by!**/*.svgapps/2020/public/assets/sponsors/Capital-Logo.pngis excluded by!**/*.pngapps/2020/public/assets/sponsors/Disney-Logo.pngis excluded by!**/*.pngapps/2020/public/assets/sponsors/EA-Logo.pngis excluded by!**/*.pngapps/2020/public/assets/sponsors/FB-Logo.pngis excluded by!**/*.pngapps/2020/public/assets/sponsors/Google-Cloud-Logo.pngis excluded by!**/*.pngapps/2020/public/assets/sponsors/Microsoft-Logo.pngis excluded by!**/*.pngapps/2020/public/assets/sponsors/NSIN-Logo.pngis excluded by!**/*.pngapps/2020/public/assets/sponsors/Oracle-Logo.svgis excluded by!**/*.svgapps/2020/public/assets/sponsors/PWC-Logo.pngis excluded by!**/*.pngapps/2020/public/assets/sponsors/RBC-Logo.pngis excluded by!**/*.pngapps/2020/public/favicon.icois excluded by!**/*.icoapps/2021/public/assets/background-music.mp3is excluded by!**/*.mp3apps/2021/public/assets/fonts/Palanquin-Bold.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Palanquin-ExtraLight.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Palanquin-Light.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Palanquin-Medium.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Palanquin-Regular.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Palanquin-SemiBold.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Palanquin-Thin.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Sansita-Black.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Sansita-BlackItalic.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Sansita-Bold.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Sansita-BoldItalic.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Sansita-ExtraBold.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Sansita-ExtraBoldItalic.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Sansita-Italic.ttfis excluded by!**/*.ttfapps/2021/public/assets/fonts/Sansita-Regular.ttfis excluded by!**/*.ttfapps/2021/public/assets/knight-hacks-dark.pngis excluded by!**/*.pngapps/2021/public/assets/knight-hacks-white.pngis excluded by!**/*.pngapps/2021/public/assets/mlh-trust-badge-2022-gray.svgis excluded by!**/*.svgapps/2021/public/assets/sponsors/CECS.pngis excluded by!**/*.pngapps/2021/public/assets/sponsors/EA.pngis excluded by!**/*.pngapps/2021/public/assets/sponsors/GSPrimary.jpgis excluded by!**/*.jpgapps/2021/public/assets/sponsors/GoogleCloud.pngis excluded by!**/*.pngapps/2021/public/assets/sponsors/Learner.pngis excluded by!**/*.pngapps/2021/public/assets/sponsors/Mantech.pngis excluded by!**/*.pngapps/2021/public/assets/sponsors/NSIN.pngis excluded by!**/*.pngapps/2021/public/assets/sponsors/TexasInstruments.pngis excluded by!**/*.pngapps/2021/public/assets/sponsors/UCF.pngis excluded by!**/*.pngapps/2021/public/assets/sponsors/echo3Dwhite.pngis excluded by!**/*.pngapps/2021/public/assets/sponsors/microsoft.pngis excluded by!**/*.pngapps/2021/public/assets/sponsors/miniFB.pngis excluded by!**/*.pngapps/2021/public/assets/sponsors/stickermule-stacked.pngis excluded by!**/*.pngapps/2021/public/assets/sponsors/synopsys.pngis excluded by!**/*.pngapps/2021/public/favicon.icois excluded by!**/*.icoapps/2023/public/assets/background.pngis excluded by!**/*.pngapps/2023/public/assets/banner.pngis excluded by!**/*.pngapps/2023/public/assets/crystal.pngis excluded by!**/*.pngapps/2023/public/assets/dagger.pngis excluded by!**/*.pngapps/2023/public/assets/dice.pngis excluded by!**/*.pngapps/2023/public/assets/dice1.pngis excluded by!**/*.pngapps/2023/public/assets/dice2.pngis excluded by!**/*.pngapps/2023/public/assets/geico.pngis excluded by!**/*.pngapps/2023/public/assets/lockheed.pngis excluded by!**/*.pngapps/2023/public/assets/logo.pngis excluded by!**/*.pngapps/2023/public/assets/microsoft.pngis excluded by!**/*.pngapps/2023/public/assets/morganmorgan.pngis excluded by!**/*.pngapps/2023/public/assets/rbc.pngis excluded by!**/*.pngapps/2023/public/assets/siemens.pngis excluded by!**/*.pngapps/2023/public/assets/spellbook.pngis excluded by!**/*.pngapps/2023/public/assets/toolcharm.pngis excluded by!**/*.pngapps/2023/public/favicon.icois excluded by!**/*.icoapps/2023/public/post.pngis excluded by!**/*.pngapps/2023/public/story.pngis excluded by!**/*.pngapps/2024/public/LinkTree.svgis excluded by!**/*.svgapps/2024/public/about.svgis excluded by!**/*.svgapps/2024/public/algae.svgis excluded by!**/*.svgapps/2024/public/algae1.svgis excluded by!**/*.svgapps/2024/public/algae2.svgis excluded by!**/*.svgapps/2024/public/algae3.svgis excluded by!**/*.svgapps/2024/public/bottom-ocean.svgis excluded by!**/*.svgapps/2024/public/cloud.svgis excluded by!**/*.svgapps/2024/public/discord.svgis excluded by!**/*.svgapps/2024/public/favicon.icois excluded by!**/*.icoapps/2024/public/header.svgis excluded by!**/*.svgapps/2024/public/instagram.svgis excluded by!**/*.svgapps/2024/public/island.svgis excluded by!**/*.svgapps/2024/public/kh-logo.svgis excluded by!**/*.svgapps/2024/public/large-bubble.svgis excluded by!**/*.svgapps/2024/public/medium-bubble.svgis excluded by!**/*.svgapps/2024/public/mlh-badge.svgis excluded by!**/*.svgapps/2024/public/ocean.svgis excluded by!**/*.svgapps/2024/public/sand.svgis excluded by!**/*.svgapps/2024/public/scuba.svgis excluded by!**/*.svgapps/2024/public/ship.svgis excluded by!**/*.svgapps/2024/public/skull.svgis excluded by!**/*.svgapps/2024/public/sky.svgis excluded by!**/*.svgapps/2024/public/small-bubble.svgis excluded by!**/*.svgapps/2024/public/sponsors.svgis excluded by!**/*.svgapps/2024/public/sponsors/bny.svgis excluded by!**/*.svgapps/2024/public/sponsors/geico.svgis excluded by!**/*.svgapps/2024/public/sponsors/ibm.svgis excluded by!**/*.svgapps/2024/public/sponsors/impress-ink.pngis excluded by!**/*.pngapps/2024/public/sponsors/kinde.svgis excluded by!**/*.svgapps/2024/public/sponsors/nextera-energy.svgis excluded by!**/*.svgapps/2024/public/sponsors/servicenow.svgis excluded by!**/*.svgapps/2024/public/sponsors/siemens-energy.pngis excluded by!**/*.pngapps/2024/public/sponsors/synopsys.svgis excluded by!**/*.svgapps/2024/public/treasure.svgis excluded by!**/*.svgpnpm-lock.yamlis excluded by!**/pnpm-lock.yaml,!pnpm-lock.yaml
📒 Files selected for processing (74)
.forge/features/legacy-hackathon-archives/spec.md.forge/features/legacy-hackathon-archives/srd.md.forge/features/legacy-hackathon-archives/status.md.forge/features/legacy-hackathon-archives/test-cases.md.gitignoreapps/2020/e2e/archive.spec.tsapps/2020/eslint.config.jsapps/2020/next.config.jsapps/2020/package.jsonapps/2020/playwright.config.tsapps/2020/public/archive-ended.htmlapps/2020/public/assets/boat-characters.jsonapps/2020/src/app/layout.tsxapps/2020/src/app/page.tsxapps/2020/src/components/animated-boat.tsxapps/2020/src/components/archive-2020.tsxapps/2020/src/styles/archive.cssapps/2020/src/styles/legacy.cssapps/2020/tsconfig.jsonapps/2020/turbo.jsonapps/2021/e2e/archive.spec.tsapps/2021/eslint.config.jsapps/2021/next.config.jsapps/2021/package.jsonapps/2021/playwright.config.tsapps/2021/public/archive-ended.htmlapps/2021/public/assets/lotties/dark-mode.jsonapps/2021/public/assets/lotties/light-mode.jsonapps/2021/src/app/about/page.tsxapps/2021/src/app/attributions/page.tsxapps/2021/src/app/faq/page.tsxapps/2021/src/app/layout.tsxapps/2021/src/app/page.tsxapps/2021/src/app/schedule/page.tsxapps/2021/src/app/sponsors/page.tsxapps/2021/src/components/archive-shell.tsxapps/2021/src/data/schedule.jsonapps/2021/src/styles/archive.cssapps/2021/src/styles/legacy.cssapps/2021/tsconfig.jsonapps/2021/turbo.jsonapps/2023/e2e/archive.spec.tsapps/2023/eslint.config.jsapps/2023/next.config.jsapps/2023/package.jsonapps/2023/playwright.config.tsapps/2023/public/archive-ended.htmlapps/2023/src/app/layout.tsxapps/2023/src/app/page.tsxapps/2023/src/app/social/page.tsxapps/2023/src/components/archive-home.tsxapps/2023/src/components/faq.tsxapps/2023/src/styles/archive.cssapps/2023/tsconfig.jsonapps/2023/turbo.jsonapps/2024/e2e/archive.spec.tsapps/2024/eslint.config.jsapps/2024/next.config.jsapps/2024/package.jsonapps/2024/playwright.config.tsapps/2024/public/archive-ended.htmlapps/2024/src/app/layout.tsxapps/2024/src/app/page.tsxapps/2024/src/app/styles.cssapps/2024/tsconfig.jsonapps/2024/turbo.jsondeploy/dockerfiles/kh2020.Dockerfiledeploy/dockerfiles/kh2021.Dockerfiledeploy/dockerfiles/kh2023.Dockerfiledeploy/dockerfiles/kh2024.Dockerfiledeploy/nginx/archive.conf.templatepackage.jsonscripts/run-archive-e2e-server.shscripts/stop-archive-e2e-container.ts
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.
Co-authored-by: Codex <codex@openai.com>
|
CodeRabbit review follow-up in e2a79b3:
Local validation passed: both repository gates, all four package format/lint/typecheck/unit checks, production-container E2E (5/5, 5/5, 5/5, 4/4), responsive browser QA, Docker teardown failure-path checks, and git diff checks. |
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
|
KH IX workspace naming is now standardized in code:
Validation: both Forge repository gates pass; all 14 KH IX tests pass; the filtered production build passes; the 116,905,476-byte pruned image runs from |
Why
The 2020, 2021, 2023, and 2024 hackathon sites are split across old repositories and Cloudflare Pages projects. Some still contain registration, authentication, dashboard, upload, or database code that no longer works. This makes the public history hard to maintain and leaves the 2024 site broken.
What
Closes: #523
node_modules.pnpm devtask while preservingpnpm dev:alland aggregate builds.apps/khix/@forge/khixtoapps/2026/@forge/2026, while preserving KH IX branding and runtime identifiers.This PR does not change Coolify or Cloudflare. After approval, the four deployments will be created one at a time. Before each hostname cutover, Cloudflare DNS will be checked for conflicting A, AAAA, and CNAME records. There will be no 2022 deployment. The existing KH IX Coolify source path will be changed to
apps/2026during that later deployment slice.Test Plan
pnpm verify:precommitpnpm verify:pushpnpm --filter @forge/2020 e2epnpm --filter @forge/2021 e2epnpm --filter @forge/2023 e2epnpm --filter @forge/2024 e2epnpm --filter @forge/2026 testpnpm --filter @forge/2026 lintpnpm --filter @forge/2026 typecheckpnpm --filter @forge/2026 buildapps/2020/out/index.htmlafter the output directory was moved aside..forge/features/legacy-hackathon-archives/status.md./app/apps/2026, and verified on/and/apply.Checklist
pnpm db:generateand committed the generated files inpackages/db/drizzle/